// Heat Seeker

ACTOR Heatseeker : IDMWeapon
{
  Weapon.SelectionOrder 400
  Weapon.SisterWeapon "SuperSeeker"
  Weapon.PreferredSkin "HeatSeekerMarine"
  Weapon.AmmoType "IDMRocketAmmo"
  Weapon.AmmoGive 15
  Weapon.AmmoUse 2
  Weapon.SlotNumber 5
  Inventory.PickupSound "misc/w_pkup"
  Inventory.PickupMessage "Heat Seeker!"
  Tag "Heat Seeker"
  +WEAPON.EXPLOSIVE
  +WEAPON.NOAUTOAIM
  +WEAPON.NOLMS
  States
  {
  Spawn:
	HEAT A -1 Bright
	Stop
  Ready:
	HSKR A 1 A_WeaponReady
	Loop
  Select:
	TNT1 A 0 A_PlaySound("weapons/wswitch",CHAN_WEAPON)
  Sloop:
    HSKR A 0 A_Raise
    HSKR A 0 A_Raise
    HSKR A 1 A_Raise
	Loop
  Deselect:
	HSKR A 0 A_Lower
	HSKR A 0 A_Lower
	HSKR A 1 A_Lower
	Loop
  Fire:
	HSKR A 3 Bright A_GunFlash
  Normal:
	MISG B 0 A_PlaySound("weapons/heatseekerf")
	TNT1 A 0 A_JumpIfInventory("PowerQuadDamage",1,"Quad")
	HSKR B 4 A_FireCustomMissile("HeatSeekerMissile",0,1)
	Goto FireEnd
  Quad:
	TNT1 A 0 A_Playsound("misc/qdmg",CHAN_AUTO,1)
	HSKR B 4 Bright A_FireCustomMissile("ExtremeHeatSeekerMissile",0,1)
  FireEnd:
	HSKR B 6 Bright
	HSKR B 2 Bright Offset(0,33)
	HSKR B 1 Bright Offset(0,34) A_Playsound("weapons/heatreload",CHAN_AUTO)
	HSKR B 1 Bright Offset(0,38)
	HSKR B 2 Bright Offset(0,42)
	HSKR B 11 Bright Offset(0,45)
	HSKR B 1 Bright Offset(0,42)
	HSKR B 2 Bright Offset(0,36)
	HSKR B 2 Bright Offset(0,34)
	HSKR A 2 Offset(0,34)
	HSKR A 5 Offset(0,33)
	TNT1 A 0 A_Refire
	Goto Ready
  Flash:
	HSKF A 3 bright A_Light1
	HSKF B 3 bright
	HSKF C 4 bright A_Light2
	HSKF D 4 bright A_Light2
	Goto LightDone
  }
}

ACTOR SuperSeeker : HeatSeeker
{
	+POWERED_UP
	+WEAPON.CHEATNOTWEAPON
	Weapon.Sisterweapon "HeatSeeker"
	Weapon.Ammogive 0
	Weapon.AmmoUse 1
	States
	{
	Ready:
		MMIS A 1 A_WeaponReady
		Loop
	Select:
		TNT1 A 0 A_PlaySound("weapons/wswitch",CHAN_WEAPON)
	Sloop:
		MMIS A 0 A_Raise
		MMIS A 0 A_Raise
		MMIS A 1 A_Raise
		Loop
	Deselect:
		MMIS A 0 A_Lower
		MMIS A 0 A_Lower
		MMIS A 1 A_Lower
		Loop
	Fire:
		MMIS A 3 Bright
    Normal:
		MMIS B 0 A_GunFlash
		MMIS B 0 A_PlaySound("weapons/multimf")
		TNT1 A 0 A_Playsound("weapons/heatreload",CHAN_AUTO)
		TNT1 A 0 A_JumpIfInventory("PowerQuadDamage",1,"Quad")
		MMIS B 3 Bright A_FireCustomMissile("SuperSeekerMissile",0,1)
		Goto FireEnd
	Quad:
		TNT1 A 0 A_Playsound("misc/qdmg2",CHAN_5)
		MMIS B 4 Bright A_FireCustomMissile("ExtremeSuperSeekerMissile",0,1)
    FireEnd:
		MMIS CDE 3 Bright
		MMIS F 3 Bright
		MMIS A 5
		TNT1 A 0 A_Refire
		Goto Ready
    Flash:
		TNT1 A 2 bright A_Light1
		TNT1 A 1 bright
		TNT1 AA 1 bright A_Light2
		Goto LightDone
	}
}

// Heat Seeker's Missile #1

ACTOR HeatSeekerMissile : IDMRocket
{
  Health 1
  Damage (100 + (20 * random(1,10)))
  Speed 20
  +SHOOTABLE /* This has to be on so that the missile can be shot midair when
				NOBLOCKMAP goes FALSE. */
  +NOBLOOD
  -NOTELEPORT
  +SKYEXPLODE
  +SEEKERMISSILE
  +SCREENSEEKER
  +NOINFIGHTING
  +NORADIUSDMG /* Missiles cannot receive splash damage. This is to prevent two
			   or more Seeker Missiles colliding with each other so easily. */
  SeeSound "weapons/seekermislf"
  Obituary "%o couldn't outrun %k's Seeker Missile."
  Decal Scorch
  Decal BigScorch
  States
  {
  Spawn:
	TNT1 A 0 A_GiveInventory("BlastImmuneItem")
	HMIS A 8 Bright
	TNT1 A 0 A_Playsound("weapons/seekerprime")
	TNT1 A 0 A_ScaleVelocity(0.9)
  Solid:
	TNT1 A 0 A_ChangeFlag(NOBLOCKMAP,0)
	HMIS A 9 Bright A_SeekerMissile(23.333,70,SMF_LOOK|SMF_CURSPEED|SMF_PRECISE,256,8)
	HMIS A 9 Bright A_SeekerMissile(21.666,65,SMF_LOOK|SMF_CURSPEED|SMF_PRECISE,256,8)
	TNT1 A 0 A_Playsound("weapons/seekerprime")
	HMIS A 8 Bright A_SeekerMissile(21.666,65,SMF_LOOK|SMF_CURSPEED|SMF_PRECISE,256,8)
	TNT1 A 0 A_Playsound("weapons/seekerprime")
	HMIS A 8 Bright A_SeekerMissile(21.666,65,SMF_LOOK|SMF_CURSPEED|SMF_PRECISE,256,8)
	TNT1 A 0 A_Playsound("weapons/seekerprime")
	HMIS A 8 Bright A_SeekerMissile(21.666,65,SMF_LOOK|SMF_CURSPEED|SMF_PRECISE,256,8)
	TNT1 A 0 A_Playsound("weapons/seekerprime")
	HMIS A 6 Bright A_SeekerMissile(20,60,SMF_LOOK|SMF_CURSPEED|SMF_PRECISE,256,8)
	TNT1 A 0 A_Playsound("weapons/seekerprime")
	HMIS A 6 Bright A_SeekerMissile(20,60,SMF_LOOK|SMF_CURSPEED|SMF_PRECISE,256,8)
	TNT1 A 0 A_Playsound("weapons/seekerprime")
	HMIS A 6 Bright A_SeekerMissile(20,60,SMF_LOOK|SMF_CURSPEED|SMF_PRECISE,256,8)
	TNT1 A 0 A_Playsound("weapons/seekerprime")
	HMIS A 6 Bright A_SeekerMissile(20,60,SMF_LOOK|SMF_CURSPEED|SMF_PRECISE,256,8)
	TNT1 A 0 A_Playsound("weapons/seekerprime")
	HMIS A 5 Bright A_SeekerMissile(18.333,55,SMF_LOOK|SMF_CURSPEED|SMF_PRECISE,256,8)
	TNT1 A 0 A_Playsound("weapons/seekerprime")
	HMIS A 5 Bright A_SeekerMissile(18.333,55,SMF_LOOK|SMF_CURSPEED|SMF_PRECISE,256,8)
	TNT1 A 0 A_Playsound("weapons/seekerprime")
	HMIS A 5 Bright A_SeekerMissile(18.333,55,SMF_LOOK|SMF_CURSPEED|SMF_PRECISE,256,8)
	TNT1 A 0 A_Playsound("weapons/seekerprime")
	HMIS A 5 Bright A_SeekerMissile(18.333,55,SMF_LOOK|SMF_CURSPEED|SMF_PRECISE,256,8)
	TNT1 A 0 A_Playsound("weapons/seekerprime")
	HMIS A 4 Bright A_SeekerMissile(16.666,50,SMF_LOOK|SMF_CURSPEED|SMF_PRECISE,256,8)
	TNT1 A 0 A_Playsound("weapons/seekerprime")
	HMIS A 4 Bright A_SeekerMissile(16.666,50,SMF_LOOK|SMF_CURSPEED|SMF_PRECISE,256,8)
	TNT1 A 0 A_Playsound("weapons/seekerprime")
	HMIS A 4 Bright A_SeekerMissile(16.666,50,SMF_LOOK|SMF_CURSPEED|SMF_PRECISE,256,8)
	TNT1 A 0 A_Playsound("weapons/seekerprime")
	HMIS A 4 Bright A_SeekerMissile(16.666,50,SMF_LOOK|SMF_CURSPEED|SMF_PRECISE,256,8)
	TNT1 A 0 A_Playsound("weapons/seekerprime")
	HMIS A 3 Bright A_SeekerMissile(13.333,40,SMF_LOOK|SMF_CURSPEED|SMF_PRECISE,256,8)
	TNT1 A 0 A_Playsound("weapons/seekerprime")
	HMIS A 3 Bright A_SeekerMissile(13.333,40,SMF_LOOK|SMF_CURSPEED|SMF_PRECISE,256,8)
	TNT1 A 0 A_Playsound("weapons/seekerprime")
	HMIS A 3 Bright A_SeekerMissile(13.333,40,SMF_LOOK|SMF_CURSPEED|SMF_PRECISE,256,8)
	TNT1 A 0 A_Playsound("weapons/seekerprime")
	HMIS A 3 Bright A_SeekerMissile(13.333,40,SMF_LOOK|SMF_CURSPEED|SMF_PRECISE,256,8)
	TNT1 A 0 A_Playsound("weapons/seekerprime")
  HomingLoop:
	HMIS A 2 Bright A_SeekerMissile(10,30,SMF_LOOK|SMF_CURSPEED|SMF_PRECISE,256,8)
	TNT1 A 0 A_Playsound("weapons/seekerprime")
	/* In the looping state, the missile will home in on a 35 degree angle on
	the first gametic every 2 tics.*/
	Loop
  Death:
	TNT1 A 0 A_SetScale(1.25)
	TNT1 A 0 A_JumpIfInventory("BlastImmuneItem",1,"NoOwnSplash")
    MISL B 6 Bright A_Explode(160,160)
    MISL C 5 Bright
	MISL D 4 Bright
    Stop
  NoOwnSplash:
    MISL B 6 Bright A_Explode(160,160,0)
    MISL C 5 Bright
	MISL D 4 Bright
    Stop
	
  }
}

ACTOR ExtremeHeatSeekerMissile : HeatSeekerMissile
{
  ProjectileKickBack 400
  +EXTREMEDEATH
  States
  {
  XDeath:
	TNT1 A 0 A_Playsound("misc/crit",CHAN_AUTO)
	Goto Death
  }
}

ACTOR SuperSeekerMissile : HeatSeekerMissile
{
  Damage (20 * random(1,15))
  Speed 18
  States
  {
  Spawn:
	TNT1 A 0 A_GiveInventory("BlastImmuneItem")
	HMIS A 6 Bright
	TNT1 A 0 A_TakeInventory("BlastImmuneItem")
	TNT1 A 0 A_Playsound("weapons/seekerprime")
	Goto Solid
  }
}

ACTOR ExtremeSuperSeekerMissile : SuperSeekerMissile
{
  ProjectileKickBack 400
  +EXTREMEDEATH
  States
  {
  XDeath:
	TNT1 A 0 A_Playsound("misc/crit",CHAN_AUTO)
	Goto Death
  }
}

ACTOR BlastImmuneItem : CustomInventory
{
	Inventory.Maxamount 1
}
